package com.davidlife.jvm.gc;

import java.util.ArrayList;
import java.util.List;

/*
记一个测试垃圾收集（GC）时常用的例子代码
 */
public class GCTestDemo {

    public static final int _1K = 1024;
    public static final int _1M = 1024 * 1024;

    public static void main(String[] args) {
        testGC1();
        //testGC2();
    }

    //可分别用以下参数作为JVM的启动参数，然后分析打印出的日志
    //-Xms20m -Xmx20m -Xmn1m -XX:SurvivorRatio=2 -XX:+PTestrintGCDetails -XX:+UseSerialGC -XX:+PrintGCTimeStamps
    //-Xms20m -Xmx20m -Xmn7m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC -XX:+PrintGCTimeStamps
    //-Xms20m -Xmx20m -Xmn15m -XX:SurvivorRatio=8 -XX:+PrintGCDetails -XX:+UseSerialGC -XX:+PrintGCTimeStamps
    private static void testGC1() {
        byte[] b = null;
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
            b = new byte[1 * _1M];
        }
    }

    //可用以下参数作为JVM的启动参数来测试，分析日志
    //-Xms5m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump
    private static void testGC2() {
        List list = new ArrayList();
        for (int i = 0; i < 25; i++) {
            System.out.println(i);
            list.add(new byte[1 * _1M]);
        }
    }
}
